#include <stdio.h>
#include <string.h>

#include <mysql/mysql.h>


void show_error(MYSQL *db){
    printf("数据库操作错误 : %s\n", mysql_error(db));
}

int main(int argc, char const *argv[])
{
    mysql_library_init(0,NULL, NULL);

    MYSQL *db = mysql_init(NULL);
    if(db == NULL){
        printf("初始化数据库失败!\n");
        return -1;
    }

    printf("数据库初始化成功!\n");
    // 连接数据库
    if(mysql_real_connect(db, "localhost", "root", "root", "cloudfs", 3306, NULL, 0) == NULL){
        show_error(db);
        goto _exit_;
    }

    printf("数据库连接成功\n");
    char *sql = "select * from t_user";
    if(mysql_real_query(db, sql, strlen(sql)) != 0){  // 执行查询
        show_error(db);
        goto _db_close_;
    }

    // 获取查询结果
    MYSQL_RES *result = mysql_store_result(db);
    if(result == NULL) goto _db_close_;
    // 获取结果集中的行数与列数
    int rows = mysql_num_rows(result); 
    int cols = mysql_num_fields(result);

    // 打印结果集的列名称
    for(int i=0;i<cols; i++){
        // 下一列方式（迭代器方式），返回NULL表示结果集中的列读取完
        MYSQL_FIELD *field=mysql_fetch_field(result); 
        printf("%10s\t", field->name);
    }
    printf("\n");

    // 打印每一行的数据（结果集中的）
    for(int i=0;i<rows;i++){
        MYSQL_ROW row=mysql_fetch_row(result);
        for(int j=0;j<cols; j++){
            printf("%10s\t", (char *)row[j]); // 打印每一行的每一列(j)的字段数据
        }
        printf("\n");
    }

_db_close_:
    mysql_close(db);

_exit_:
    mysql_library_end();
    return 0;
}
